import { Injectable } from '@nestjs/common';
import { Response } from 'express';

@Injectable()
export class SseService {
  private _clients: Set<Response> = new Set();
  async addClient(res: Response) {
    // 关键检查：确保响应头尚未发送
    if (res.headersSent) {
      console.error('无法添加 SSE 客户端：响应头已发送');
      return { msg: '无法添加 SSE 客户端：响应头已发送' };
    }

    // 设置 SSE 响应头
    res.setHeader('Cache-Control', 'no-cache');
    res.setHeader('Content-Type', 'text/event-stream');
    res.setHeader('Connection', 'keep-alive');
    res.flushHeaders();

    // 添加客户端到集合
    this._clients.add(res);

    // 客户端断开连接时清理
    res.on('close', () => {
      this._clients.delete(res);
      console.log('SSE 客户端已断开连接');
    });

    console.log('新的 SSE 客户端已连接');
    return { msg: '新的 SSE 客户端已连接' };
  }

  // 向所有客户端发送消息
  sendEvent(event: string, data: any) {
    this._clients.forEach((client) => {
      client.write(`event: ${event}\n`);
      client.write(`data: ${JSON.stringify(data)}\n\n`);
    });
  }
}
